package com.bjpowernode.util;

import java.util.Objects;
import java.util.function.Consumer;
import java.util.function.Supplier;

import org.springframework.util.ObjectUtils;

/**
 * 緩存通用工具类
 *
 */
public class CacheUtils {

	/**
	 * 缓存通用方法
	 * 
	 * @param <T>           数据
	 * @param cacheSelector redis查询生产者
	 * @param dbSelector    数据库查询生产者
	 * @param cacheSave     redis存数据消费者
	 * @return
	 */
	public static <T> T getCacheData(Supplier<T> cacheSelector, Supplier<T> dbSelector, Consumer<T> cacheSave) {
		// 从redis查询
		T t = cacheSelector.get();
		// 如果redis没查到
		if (ObjectUtils.isEmpty(t)) {
			// 从数据库查
			T db = dbSelector.get();
			// 数据库查到了数据
			if (!ObjectUtils.isEmpty(db)) {
				// 把数据放到redis
				cacheSave.accept(db);
			}
			return db;
		} else {
			return t;
		}
	}
}
